Diakritika v InterBase

Otázka od: Jiri Cincura

16. 9. 2004 20:37

Ahoj,
  mam v Interbase udelanou DB, kde mam texty s diakritikou. Charset mam na
WIN1250.

Pak se z D8 pomoci std. komponent pripojuju k teto DB. Vse je skvele, az na
na to, ze mam jeden SELECT typu:

'SELECT cislo, cd_id, name_cz, name_en, info FROM dily WHERE UPPER(name_cz)
like ''%'+UpperCase(Edit1.Text)+'%'' ORDER BY cislo ASC;'

Pokud ale Edit1.Text obsahuje ceske znaky, spadne mi to do vyjimky.

Nevite tedy nekdo, jak tam ty znaky dostat?

--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net



Odpovedá: Jakub Dusek

16. 9. 2004 20:57

Idealne pres parametry (co kdyz bude v nazvu dilu apostrof?  . Ale
ta chyba je asi v tom, ze nepouzivas AnsiUpperCase (UpperCase
neprevede diakritiku spravne).

Query1.SQl.Text :=
'SELECT cislo, cd_id, name_cz, name_en, info FROM dily WHERE UPPER(name_cz) like :param0 ORDER BY cislo ASC;'
Query1.Params[0].AsString = '%' + AnsiUpperCase(Edit1.Text) + '%'.

Pokud to nepomuze, posli text vyjimky.

Jakub Dusek
----------------------------------------------------------------------
web: http://www.corexpert.com, mobile: +420 604 615 795, ICQ: 86063232
odesilani smsek, vizitek, log a melodii, snadna integrace do Vaseho IS
     => Sms GateKeeper, Sms GateKeeper Service

======================================================================
Thursday, September 16, 2004, 9:10:54 PM, you wrote:

JC> Ahoj,
JC> mam v Interbase udelanou DB, kde mam texty s diakritikou. Charset mam na
JC> WIN1250.

JC> Pak se z D8 pomoci std. komponent pripojuju k teto DB. Vse je skvele, az na
JC> na to, ze mam jeden SELECT typu:

JC>
'SELECT cislo, cd_id, name_cz, name_en, info FROM dily WHERE UPPER(name_cz)
JC> like ''%'+UpperCase(Edit1.Text)+'%'' ORDER BY cislo ASC;'

JC> Pokud ale Edit1.Text obsahuje ceske znaky, spadne mi to do vyjimky.

JC> Nevite tedy nekdo, jak tam ty znaky dostat?

JC> --
JC> Jiri Cincura
JC> e-mail: mailto:jiri@cincura.net;
JC> mailto:xcincura@informatics.muni.cz
JC> ICQ: 314711544
JC> web: http://www.cincura.net; http://photo.cincura.net




Odpovedá: Jiri Cincura

17. 9. 2004 7:52

Jakub Dusek wrote:
>
> Pokud to nepomuze, posli text vyjimky.
>

Normalne v dotazu (s i bez Ansi...):
arithmetic exception, numeric overflow, or string truncation Cannot
transliterate character between character sets.

S parametrem:
Project Project1.exe encountered unhandled exception class
Borland.Vcl.IB.EIBClientError. Process stopped. Use Step or Run to continue.

Se to ani nespusti. Hned pri startu (pri CreateForm, jakmile napisu heslo do
DB, pritom v OnCreate ja nic nemam).Taky jsem na to vcera koukal jako
blazen. Proto jsem to dal rovnou do dotazu.



--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net



Odpovedá: Jiri Cincura

17. 9. 2004 6:59

Jakub Dusek wrote:
> Idealne pres parametry (co kdyz bude v nazvu dilu apostrof?  . Ale ta

Uz jsem to rozjel. Pomohl restart serveru. ;)

Ale mam tu dalsi:
Index je mimo rozsah. Index musi byt nezaporny a musi byt mensi nez velikost
kolekce. Nazev parametru: index.

Pritom Params mam 4 a davam to do nulteho.

--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net



Odpovedá: Jiri Cincura

17. 9. 2004 11:11

Jakub Dusek wrote:
> Idealne pres parametry (co kdyz bude v nazvu dilu apostrof?  . Ale ta
> chyba je asi v tom, ze nepouzivas AnsiUpperCase (UpperCase neprevede
> diakritiku spravne).
>
> Query1.SQl.Text :=
'SELECT cislo, cd_id, name_cz, name_en, info FROM dily
> WHERE UPPER(name_cz) like :param0 ORDER BY cislo ASC;'

> Query1.Params[0].AsString = '%' + AnsiUpperCase(Edit1.Text) + '%'.
>
> Pokud to nepomuze, posli text vyjimky.

Tak jsem konecne rozjel ty Params. Ja blbec mel Params pred selectem, proto
jsem jich mel vzdy 0. No ji patek.  

Ale zpet k problemu.   Porad tam nemuzu dostat tu diakritku.


arithmetic exception, numeric overflow, or string truncation Cannot
transliterate character between character sets.

--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net



Odpovedá: Jakub Dusek

18. 9. 2004 9:04

Aha uz asi tusim, ale v tom pripade ti tu lepe poradi nejaky IBista
nebo FBista, ja jsem Oraclista   Myslim, ze se musi v selectu
nastavit znakova sada, vim ze to ma neco spolecneho s COLLATE (mrkni
do helpu), porad se tu o tom mluvi  

Jakub Dusek
----------------------------------------------------------------------
web: http://www.corexpert.com, mobile: +420 604 615 795, ICQ: 86063232
odesilani smsek, vizitek, log a melodii, snadna integrace do Vaseho IS
     => Sms GateKeeper, Sms GateKeeper Service

======================================================================
Friday, September 17, 2004, 11:50:12 AM, you wrote:

JC> Tak jsem konecne rozjel ty Params. Ja blbec mel Params pred selectem, proto
JC> jsem jich mel vzdy 0. No ji patek.  

JC> Ale zpet k problemu.   Porad tam nemuzu dostat tu diakritku.


JC> arithmetic exception, numeric overflow, or string truncation Cannot
JC> transliterate character between character sets.



Odpovedá: Jiri Cincura

18. 9. 2004 9:58

Jakub Dusek wrote:
> Aha uz asi tusim, ale v tom pripade ti tu lepe poradi nejaky IBista nebo
> FBista, ja jsem Oraclista   Myslim, ze se musi v selectu nastavit
> znakova sada, vim ze to ma neco spolecneho s COLLATE (mrkni do helpu),
> porad se tu o tom mluvi  

Collate je na trideni (treba CH, apod.).

Ale prisel jsem na to. Pred "kriticke" znaky staci dat _WIN1250. Treba:
select * from dily where UPPER(name_cz) like _WIN1250'%E%'


Ale i tak diky.

--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net



Odpovedá: Jiri Cincura

18. 9. 2004 10:06

Jiri Cincura wrote:
>
> Ale prisel jsem na to. Pred "kriticke" znaky staci dat _WIN1250. Treba:
> select * from dily where UPPER(name_cz) like _WIN1250'%E%'

Nadseni opadlo.  

Jelo to jen v konzoli, ale v kodu uz je to horsi.

No nic, budu zkouset dal. Kdyby nekdo vedet co s tim, pls, napiste to sem.

--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net



Odpovedá: Lauko Stefan

18. 9. 2004 10:48

> No nic, budu zkouset dal. Kdyby nekdo vedet co s tim, pls, napiste to sem.

Ahoj,
do IbDatabase.Params zapis toto:
USER_NAME=...
PASSWORD=...
lc_ctype=WIN1250

Lauko.